import CParameter
def explicit(start: list, x: float, y: float) -> list:
    """
    时间显式
    :param start: 初值或迭代后的值
    :param x: 点长度
    :param y: 时间步长
    :return: 迭代后的值
    """
    end = []

    # 计算第一个节点 对称绝热条件
    ap1, aw0, ae0, ap0 = CParameter.rho * CParameter.c * x / y, 0, CParameter.k / x, (CParameter.rho * CParameter.c * x / y) - (CParameter.k / x)  # 系数
    tw0, te0, tp0 = 0, start[1], start[0]
    b = CParameter.s * x
    tp1 = (aw0 * tw0 + ae0 * te0 + ap0 * tp0 + b) / ap1
    end.append(tp1)

    # 计算中间节点
    ap1 = CParameter.rho * CParameter.c * x / y
    aw0 = CParameter.k / x
    ae0 = CParameter.k / x
    ap0 = (CParameter.rho * CParameter.c * x / y) - (CParameter.k / x) - (CParameter.k / x)
    b = CParameter.s * x
    for i in range(1, len(start) - 1):
        tw0 = start[i - 1]
        te0 = start[i + 1]
        tp0 = start[i]
        tp1 = (aw0 * tw0 + ae0 * te0 + ap0 * tp0 + b) / ap1
        end.append(tp1)

    # 计算最后一个节点 第三类边界条件
    ap1 = CParameter.rho * CParameter.c * x / y
    aw0 = CParameter.k / x
    ae0 = 0
    ap0 = (CParameter.rho * CParameter.c * x / y) - (CParameter.k / x) - (1 / ((1 / CParameter.h) + (x / CParameter.k)))
    tw0 = start[-2]
    te0 = 0
    tp0 = start[-1]
    b = CParameter.s * x + (CParameter.tf / ((1 / CParameter.h) + (x / (2 * CParameter.k))))
    tp1 = (aw0 * tw0 + ae0 * te0 + ap0 * tp0 + b) / ap1
    end.append(tp1)

    return end